分享一些個人常用的方法,本文會講解用法與用途,讓新手上手時可以快速使用。
數值型別都會有一個 Parse 方法,可以使字串轉換成數字型別,若字串內容不是數字則會使程式掛掉如
int a1 = int.Parse ("16"); // 成功得到 16
int a2 = int.Parse ("5.16"); // 成功得到 5 因為是 int 沒有小數點
int a3 = int.Parse ("1.2.3"); // 失敗 因為 1.2.3 不是一個數字
double d1 = double.Parse("5.16") 成功得到 5.16
當欲轉換成數字的內容是使用者定義的話,我們無法限制他輸入的內容,所以我們並需改用另一種方法 TryParse,這方法傳回的值是 bool,並給出一個被 out 寫入的變數如
int number = 1; // 先定義一個 number 去接收 TryParse 成功轉換後的值。
bool b1 = int.TryParse("1.2.3", out number); // 得到 False 因為無法轉換 number 還是 1
bool b2 = int.TryParse("6", out number); // 得到 True 所以 number 變成 6
此方法可以當作過濾錯誤的輸入值或資料來源的錯誤資料如
string input = Console.ReadLine ();
if (int.TryParse (input, out int number)) {
Console.WriteLine ($"你輸入的是數字{number}");
} else {
Console.WriteLine ("你輸入的不是數字");
}
Console.ReadKey ();
out 寫入的變數也可以在呼叫方法時初始化。
把數值轉換成字串
int number = 5;
string str = number.ToString();
上面講的方法都是型別的靜態方法,也就是由型別 int. 或者 double. 所呼叫的方法,而 ToString 則是型別的原生方法,也就是由變數 number. 所呼叫的方法。
題外話:我不知道用原生方法這個詞好不好,主要是為了與之後的擴充方法做個差異。
從數值轉換成字串時,我們可以帶參數使轉換的字串是貨幣、百分比或者換成其他進制表示等。
int number = 516;
string currency = number.ToString ("C");
Console.WriteLine (currency);
string percent = number.ToString ("P");
Console.WriteLine (percent);
string hex = number.ToString ("X");
Console.WriteLine (hex);
Console.ReadKey ();
更多的轉換方式可以到參考連結看
個人習慣如果不是要轉成特定樣子,而是單純的使數字轉型,則會使用隱性轉型的方式
int number = 6
string str = number + "";
加一個空字串,因為運算子 + 使 number 變成字串後與空字串相加成 str。
字串的處理就會比數值多很多了,如尋找、替換、切割、補零等等功能。
主要是字串的拼接
string a1 = "555";
string a2 = "666";
string a3 = string.Format ("a1 = {0}, a2 = {1}", a1, a2);
Console.WriteLine (a3); // a1 = 555, a2 = 666
Format 是用括弧內的數字,從 0 開始數對照到後面的引數內容,要注意的是括弧的數值一定要對照到後面的引數,無法像這樣string.Format ("a1 = {8}", a1);
,找不到第 8 + 1 個引數會使程式錯誤,但如果是給予超過數量的引數不會造成程式錯誤。
而講到 Format 是不是似曾相識的感覺,很像我之前寫的$
語句,在字串前面加入$
就是一種 Format 的方法,可以把上面的程式碼改成$"a1 = {a1}";
,是不是更好讀了,雖然實際上還是做了跟 Format 一樣的行為,但讓程式碼讀得時候,如果引數一多就不用在那邊連連看了。
想知道更多可以參考連結的字串內插補點。
題外話:因為$
我本身不再用 Format,對我在初學時是沒有看過這符號的。
String.IsNullOrEmpty (value)
相當於 (value == null || value == String.Empty)
String.IsNullOrWhiteSpace (value)
相當於 (String.IsNullOrEmpty (value) || value.Trim ().Length == 0)
為什麼需要做 Null 檢查呢?因為原生方法如果變數內容是 null 的話是會報錯的,這邊簡單比較兩種方式的差別,個人是都只用最後一種啦。
這邊開始就是原生方法了,檢查字串是不是包含某個字元或字串,傳回值為 bool。
string str1 = "ABC";
bool b1 = str1.Contains ("BC");
bool b2 = str1.Contains ("CB");
Console.WriteLine (b1); // True
Console.WriteLine (b2); // False
補充字元,因為數值型態前面不會帶 0,如果需要以 0 開頭的話則需要轉換成字串,並將開頭補 0,或者補空白排版等用途。
string str = "516".PadLeft (5, '0');
Console.WriteLine (str); // 00516
前面一位為數量,後面為補上的字元,可不填,不填時為補充空白。
PadRight 則是從右邊補字元。
取代字串內容,如果需要將 1 2 3 改成中文數字一、二、三。
string str = "123".Replace ("1", "一").Replace ("2", "二").Replace ("3", "三");
Console.WriteLine (str); // 一二三
字串切割。
用字元做為切割,不加任何條件版本。
separator 為切割的字元組或字串組 char[] or string[]
count 為分割最大數量
"stringsplit".Split (new char[]{'s'}, 1); // {"stringsplit"}
"stringsplit".Split (new char[]{'s'}, 2); // {"","tringsplit"}
"stringsplit".Split (new char[]{'s'}, 3); // {"","tring","plit"}
options 為是否包含空白字元
"stringsplit".Split (new char[] { 's' }, 2, StringSplitOptions.RemoveEmptyEntries); // {"tring","plit"}
擷取字串。
string str = "123456789".Substring (1, 5);
Console.WriteLine (str); // 23456
從 0 開始數,所以 1 的位置是 2,然後往後數五個字元。
也可以不加數量
string str = "123456789".Substring (1);
Console.WriteLine (str); // 23456789
移除開頭與結尾字元,直到下個字元不等於該字元,如果不給引數則移除空白。
string str = "9129345678999".Trim ('9');
Console.WriteLine (str); // 129345678
TrimStart 只移除開頭字元
TrimEnd 只移除結尾字元
今天大致上介紹了本人比較常見的型別方法,雖然還滿猶豫要寫出來的,但日後使用的時候又需要解釋,不如就...
昨天在講解方法的時候沒有提到,VSCode 可以按 F12 查看方法,所以上述的所有方法都可以按 F12 顯示類別的方法,因為是引用 dll 所以沒有完整的 code,但可以看該類別的所有方法,所以除了我舉例的這些還有很多方法。
類別是什麼之後也會提到,還有如何增加類別的原生方法,也就是擴充方法。
感謝閱讀。
參考連結
標準數值格式字串 | Microsoft Docs
字串內插補點